package io.gitee.xyuesheng.day08.Thread;

public class Counter {
    private int count = 0;

    //synchronized给方法加锁，同时只能有一个线程执行方法里面的代码
    //其他线程调用此方法时，会被**阻塞**
//    public synchronized void increase(){
//        this.count++;//不是原子性的操作，底下实际有多个步骤
//    }

//    public void increase(){
//        synchronized (this){//使用当前对象作为同步锁
//            this.count++;
//        }

    private Object lock = new Object();

    public void increase() {
        synchronized (lock) {//使用自定义的锁（java里面任何对象都可以作为锁）
            this.count++;
        }

    }

    public int getCount() {
        return this.count;
    }

    //对于静态的同步方法，会用当前类的字节码对象作为锁
    public synchronized static void foo() {
        System.out.println(Counter.class);
        //Counter.class，字节码对象
    }

    public static void main(String[] args) {

        System.out.println(Counter.class);
    }

}
